// Tauri 环境检测和错误处理工具
import { invoke } from '@tauri-apps/api/tauri';

/**
 * 检测是否在 Tauri 环境中运行
 * @returns {boolean} 是否在 Tauri 环境中
 */
export const isTauriEnvironment = (): boolean => {
  // 检查多个 Tauri 环境标识符
  const hasTauri = typeof window !== 'undefined' && 
                   typeof window.__TAURI__ === 'object' && 
                   window.__TAURI__ !== null;
  
  const hasTauriAPI = typeof window !== 'undefined' && 
                      typeof window.__TAURI_IPC__ === 'function';
  
  const hasTauriInvoke = typeof window !== 'undefined' && 
                         window.__TAURI__ && 
                         typeof (window.__TAURI__ as any).invoke === 'function';
  
  console.log('🔍 详细环境检测:', {
    hasTauri,
    hasTauriAPI,
    hasTauriInvoke,
    windowTauriKeys: typeof window !== 'undefined' ? Object.keys(window).filter(key => key.includes('TAURI')) : [],
    userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown'
  });
  
  // 任何一个 Tauri 标识符存在即认为在 Tauri 环境中
  return hasTauri || hasTauriAPI || hasTauriInvoke;
};

/**
 * 安全的 Tauri invoke 调用，包含环境检测和错误处理
 * @param command Tauri 命令名称
 * @param args 命令参数
 * @returns Promise<any>
 */
export const safeTauriInvoke = async (command: string, args?: any): Promise<any> => {
  // 详细的环境检测日志
  console.log('🔍 Tauri命令调用开始:', {
    command,
    args,
    environment: {
      hasWindow: typeof window !== 'undefined',
      hasTauriObject: typeof window !== 'undefined' && typeof window.__TAURI__ === 'object',
      hasTauriIPC: typeof window !== 'undefined' && typeof window.__TAURI_IPC__ === 'function',
      hasTauriInvoke: typeof window !== 'undefined' && window.__TAURI__ && typeof (window.__TAURI__ as any).invoke === 'function',
      windowLocation: typeof window !== 'undefined' ? window.location.href : 'unknown',
      allTauriKeys: typeof window !== 'undefined' ? Object.keys(window).filter(key => key.includes('TAURI')) : []
    }
  });

  if (!isTauriEnvironment()) {
    const environmentInfo = {
      userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',
      location: typeof window !== 'undefined' ? window.location.href : 'unknown',
      windowKeys: typeof window !== 'undefined' ? Object.keys(window).filter(key => key.includes('TAURI')) : [],
      hasTauriObject: typeof window !== 'undefined' && typeof window.__TAURI__ === 'object',
      hasTauriIPC: typeof window !== 'undefined' && typeof window.__TAURI_IPC__ === 'function',
      windowTauriType: typeof window !== 'undefined' ? typeof window.__TAURI__ : 'undefined'
    };
    
    console.error(`❌ Tauri 环境检测失败\n\n无法调用 Tauri API: ${command}\n\n环境信息: ${JSON.stringify(environmentInfo, null, 2)}`);
    
    console.error('🚨 Tauri环境检测失败:', {
      command,
      args,
      environmentInfo
    });
    
    // 不再弹窗，改为控制台输出详细信息
    console.warn('⚠️ 如果您在 Tauri 应用中看到此错误，请检查 Tauri 初始化是否完成');
    throw new Error(`Tauri environment check failed for command: ${command}`);
  }

  console.log('✅ Tauri环境检测通过，开始调用命令:', command);
  
  try {
    const result = await invoke(command, args);
    console.log('✅ Tauri命令调用成功:', command, result);
    return result;
  } catch (error) {
    console.error(`❌ Tauri 命令调用失败: ${command}`, {
      error,
      args,
      errorMessage: error instanceof Error ? error.message : String(error)
    });
    throw error;
  }
};

/**
 * 显示环境提示信息
 */
export const showEnvironmentInfo = (): void => {
  if (!isTauriEnvironment()) {
    const infoMessage = `
🔍 环境检测

当前运行环境：浏览器
推荐环境：Tauri 应用

要获得完整功能，请：
1. 运行 'pnpm tauri dev'
2. 在弹出的 Tauri 应用窗口中使用

注意：某些功能（如窗口透明度、全局快捷键）仅在 Tauri 环境中可用。`;
    
    console.info(infoMessage);
  } else {
    console.info('✅ 当前运行在 Tauri 环境中，所有功能可用。');
  }
};